// pages/cart/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},
    cart:[],
    allChecked:false,
    priceSum:999,
    numSum:0
  },

  //获取缓存中的收货地址
  onShow(){
    const adds=wx.getStorageSync("adds");
    const cart=wx.getStorageSync('cart')||[];
    this.setData({
      address:adds
    })
    this.setCart(cart);
    wx.hideLoading();
  },

  //获取收货地址
  getAdds(){
    wx.chooseAddress({
      //获取到地址信息
      success: (res) => {
        //将用户收货地址存入缓存中
        wx.setStorageSync('adds', res)
      },
    })
  },  

  //点击单个商品复选框后触发事件
  handItem(e){
    //1 获取被修改的商品id
    const goods_id=e.currentTarget.dataset.id;

    //2 获取购物车数组
    let {cart}=this.data;

    //3 查找被修改的商品对象
    let index=cart.findIndex(v=>v.goods_id===goods_id);

    //4 将该商品对象的复选框选中状态取反
    cart[index].cheked=!cart[index].cheked;

    //5 将修改后的购物车数组写回data中和缓存中
    wx.setStorageSync('cart', cart);
    
    //6 重新计算总价和数量
    this.setCart(cart);
  },

  //商品全选
  handitemAll(){
    //1 获取data中的值
    let {cart,allChecked}=this.data;

    //2 修改当前选中状态
    allChecked=!allChecked;

    //3 循环寻该cart中商品的选中状态
    cart.forEach(v=>v.cheked=allChecked);

    //4 把修改后的cart放回data和缓存，以及重新计算总价和数量
    this.setCart(cart);
  },
  /**
   *  重新设置购物车数据
   *  重新计算总价和数量
   * */
  setCart(cart){
    //计算是否全选
    //判断元素中是否有false，只要有一个false就会返回false
    let allChecked=true;

    //计算商品总数和总价
    let priceSum=0;
    let numSum=0;
    cart.forEach(e => {
      if(e.cheked){
        numSum+=e.num;
        priceSum+=e.price*e.num;
      }else{
        allChecked=false;
      }
    })
    //判断购物车数组长度是不是空的
    allChecked=cart.length?allChecked:false;
    
    this.setData({
      cart:cart,
      allChecked:allChecked,
      priceSum:priceSum,
      numSum:numSum
    })

    wx.setStorageSync('cart', cart);
  },

  //点击加减号触发事件
  sumAdd(e){
    //1 获取传递来的参数
    const {operation,id}=e.currentTarget.dataset;

    //2 获取购物车数组
    let {cart}=this.data;

    //3 找到需要修改商品的索引
    const index=cart.findIndex(v=>v.goods_id===id);

    //4 判断当前商品数量是否为 1 同时用户是否点的是减号
    if(cart[index].num===1&&operation===-1){
      //弹窗提示
      wx.showModal({
        title: '提示',
        content: '是否要删除该商品？',
        success :(res)=> {
          if (res.confirm) {
            cart.splice(index,1);
            this.setCart(cart);
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        }
      })
    }else{
      //5 对购物车中商品的数量进行修改
      cart[index].num+=operation;

      //5 将数据设置会data和缓存中
      this.setCart(cart);
    }

    

  },

  /**
   * 在购物车页点击结算后
   */
  handPay(){
    //判断用户是否选择了收货地址
    const {address,numSum}=this.data;
    if(!address.userName){
      console.log(1);
      //无收货地址
      wx.showToast({
        title: '无收货地址',
        icon: 'none'
      })  
      return;
    } 
    //当购物车中无商品
    if(numSum===0){
      
      wx.showToast({
        title: '无选购商品',
        icon: 'none'
      })
      return;
    }
    //跳转到支付页面
    wx.navigateTo({
      url: '/pages/pay/index',
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    wx.showLoading({
      title: '正在努力加载',
    })
  }
})